import csv
import re


def md_table_to_csv(md_file_path, csv_file_path):
    """
    将 Markdown 文件中的表格转换为 CSV 格式
    :param md_file_path: 输入的 Markdown 文件路径
    :param csv_file_path: 输出的 CSV 文件路径
    """
    # 预编译正则表达式以提高效率
    table_row_re = re.compile(r'^\s*\|(.+)\|\s*$')  # 匹配表格行
    separator_re = re.compile(r'^:?-+:?$')  # 匹配分隔符行（包含对齐符号）

    table_data = []
    in_table = False

    try:
        with open(md_file_path, 'r', encoding='utf-8') as md_file:
            for line in md_file:
                line = line.strip()

                # 检测表格行
                match = table_row_re.match(line)
                if match:
                    if not in_table:
                        in_table = True

                    # 分割单元格并去除两端空白
                    parts = [part.strip() for part in match.group(1).split('|')]

                    # 跳过分隔符行（检查是否全为分隔符列）
                    if all(separator_re.match(part) for part in parts):
                        continue

                    # 处理转义字符（将 \| 恢复为 |）
                    cleaned_parts = [part.replace('\\|', '|') for part in parts]
                    table_data.append(cleaned_parts)
                else:
                    if in_table:
                        # 表格结束（遇到非表格行）
                        in_table = False

        # 写入 CSV 文件
        with open(csv_file_path, 'w', newline='', encoding='utf-8') as csv_file:
            writer = csv.writer(csv_file)

            # 添加 BOM 头解决 Excel 中文乱码问题
            csv_file.write('\ufeff')

            writer.writerows(table_data)

        print(f'成功转换 {len(table_data)} 行数据到 {csv_file_path}')

    except FileNotFoundError:
        print(f"错误：输入文件 {md_file_path} 不存在")
    except Exception as e:
        print(f"转换过程中发生错误: {str(e)}")


# 使用示例
if __name__ == "__main__":
    input_md = 'input.md'  # 输入文件路径
    output_csv = 'output.csv'  # 输出文件路径

    md_table_to_csv(input_md, output_csv)
